/******************************************
 **********   严格的身份证校验   ***************
 ******************************************/
// 获取各省市与身份证上第1、2两位数字
import { ID_CARD_CITY_MAP, VALIDATE_ID_CARD_ERROR_MSG } from '@/constants/id-card-city';

/**
 * 身份证格式严格校验
 * @param {*} sId   身份证号码
 * @returns  { Boolean }
 */
export const isCardID = (sId, strict = false) => {
  // 你输入的身份证长度或格式错误
  if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
    if (strict) return '10001001';
    return false;
  }
  // 你的身份证地区非法
  if (!ID_CARD_CITY_MAP[parseInt(sId.substr(0, 2))]) {
    if (strict) return '10001002';
    return false;
  }

  // 出生日期验证
  var sBirthday = (sId.substr(6, 4) + '-' + Number(sId.substr(10, 2)) + '-' + Number(sId.substr(12, 2))).replace(/-/g, '/'),
    d = new Date(sBirthday);
  if (sBirthday != d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()) {
    if (strict) return '10001003';
    return false;
  }

  // 身份证号码校验
  var sum = 0,
    weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
    codes = '10X98765432';
  for (var i = 0; i < sId.length - 1; i++) {
    sum += sId[i] * weights[i];
  }
  var last = codes[sum % 11]; //计算出来的最后一位身份证号码
  if (sId[sId.length - 1] != last) {
    if (strict) return '10001004';
    return false;
  }
  if (strict) return 0;
  return true;
};
